// 封装一个方法，如果传入的是姓名，就打印我是***，传入的是年龄，就打印，我今年**岁
function greet(name:string | number){
    if(typeof name==='string'){
        console.log(`我的名字叫${name}`);
    }else{
        console.log(`我的年龄${name}`);
    }
}
greet('朵拉')
greet(18)


// never类型
// function fn():never {
//     throw new Error('错误')
// }
// fn()

// 索引签名

// 可选参数
function fn1(a:string,b:string,c?:string):void{
    console.log('hhhhhhhhhhhhhhhhhhh');
}
fn1('111','222')


// 函数重载
// 面向对象的三大特征：封装 继承 多态
// 多态：一个对象的多种形态，就是一个函数根据传入的参数类型不同执行不同的代码，返回不同的结果  $
function fn2(timeStamp:number):Date
function fn2(d:number,m:number,y:number):Date

function fn2(timeStamp:number,m?:number,y?:number):Date{
    if(m && y){
        return new Date(y,m,timeStamp)
    }
    return new Date(timeStamp)
}
console.log(fn2(Date.now()));
console.log(fn2(2023,12,26));

